Jedná se o zápis s Pythonu s jehož pomocí se dají jednoduše vytvářet seznamy.
In [1]:
[x for x in range(10)]
Out[1]:
In [2]:
[x**2 for x in range(10)]
Out[2]:
In [3]:
[x**2 for x in range(10) if x % 2 == 0]
Out[3]:
In [4]:
[(x, x**2) for x in range(10)]
Out[4]:
In [5]:
[[y for y in range(3)] for x in range(10)]
Out[5]:
In [ ]:
def vytvor_tabulku():
zap_tabulka = []
for rada_x in '.', '.', '.', '.', '.', '.', '.', '.', '.', '.':
radek = []
for rada_y in '.', '.', '.', '.', '.', '.', '.', '.', '.', '.':
radek.append(rada_y)
zap_tabulka.append(radek)
return zap_tabulka
In [ ]:
def vytvor_prazdne_herni_pole(r,s):
seznam_radku = []
for a in range(r):
radek = ["."]
for b in range(s-1):
radek.append(".")
seznam_radku.append(radek)
return seznam_radku
In [ ]:
def vytvor_tabulku(velikost):
seznam_radku = []
for a in range(velikost):
radek = []
for b in range(velikost):
radek.append(".")
seznam_radku.append(radek)
return seznam_radku
In [ ]:
def vytvor_tabulku(velikost):
tabulka = []
for x in range(velikost):
radek = ['.' for x in range(velikost)]
tabulka.append(radek)
return tabulka
In [5]:
def vytvor_tabulku(velikost):
return [list('.' * velikost) for x in range(velikost)]
In [4]:
def vytvor_tabulku(velikost):
return [['.'] * velikost] * velikost
Je vytvoření kompletní tabulky se všemi hracími políčky vážně potřeba?
Najdi chyby, nejasnosti či nepřesnosti v tomto kódu:
In [ ]:
zvirata = [ "pes", "kočka", "králík", "had", "ježek"]
znak = "k"
def pismeno(jmeno):
for i in range(5):
if znak in jmeno[i][0]:
print(jmeno[i])
return
pismeno(zvirata)
Takto by to mohlo vypadat přehlednější a pochopitelnější
In [ ]:
zvirata = [ "pes", "kočka", "králík", "had", "ježek"]
def s_prvnim_pismenem(seznam_zvirat, pismeno):
for zvire in seznam_zvirat:
if zvire.startswith(pismeno):
print(zvire)
s_prvnim_pismenem(zvirata, 'k')
Další podobná funkce:
In [ ]:
def kratke(jmeno = zvirata):
for i in range(len(jmeno)):
if len(jmeno[i]) < 5:
print(jmeno[i])
else:
print(end = "")
return jmeno
kratke(zvirata)
A její přehlednější varianta:
In [ ]:
def kratke(seznam_zvirat):
for jmeno in seznam_zvirat:
if len(jmeno) < 5:
print(jmeno)
kratke(zvirata)
Je možné tuto funkci zkrátit a zjednodušit?
In [ ]:
def overeni(seznam):
"ověří, zda je zadané slovo v seznamu a vrátí True/False"
otazka = input("Zadej název zvířete, jež chceš ověřit: ")
if otazka in seznam:
return True
else:
return False
Ano, je to možné
In [ ]:
def overeni(seznam):
"ověří, zda je zadané slovo v seznamu a vrátí True/False"
otazka = input("Zadej název zvířete, jež chceš ověřit: ")
return otazka in seznam
In [ ]:
from random import randrange
def velikost_hraciho_pole():
while True:
odpoved = input('Zadej velikost pole pro hada: ')
try:
velikost = int(odpoved)
except ValueError:
print('Velikost musí být celé číslo')
else:
if velikost < 5:
print('Pole musí být rozumně veliké')
break
return velikost
def vykresli_mapu(velikost, had, ovoce):
for x in range(velikost):
for y in range(velikost):
if (x, y) in had:
print('X', end=' ')
elif (x, y) in ovoce:
print('?', end=' ')
else:
print('.', end=' ')
print()
def posun(velikost, had, ovoce):
while True:
smer = input('Zadej smer posunu [s, j, v, z]: ')
smer = smer.lower().strip()
if smer not in ('s', 'j', 'v', 'z'):
print('Nekorektni smer!')
else:
break
hlava = had[-1]
x, y = hlava
if smer == 's':
nova_hlava = x-1, y
elif smer == 'j':
nova_hlava = x+1, y
elif smer == 'v':
nova_hlava = x, y+1
elif smer == 'z':
nova_hlava = x, y-1
if nova_hlava in had:
print('Narazil si sam do sebe')
return False
x, y = nova_hlava
if x < 0 or x > velikost-1 or y < 0 or y > velikost-1:
print('Vyjel si mimo herni pole')
return False
if nova_hlava in ovoce:
ovoce.remove(nova_hlava)
else:
del had[0]
had.append(nova_hlava)
return True
def pridej_ovoce(velikost, had, ovoce):
ovoce.append((randrange(0, velikost), randrange(0, velikost)))
while ovoce[-1] in had:
del ovoce[-1]
ovoce.append((randrange(0, velikost), randrange(0, velikost)))
velikost = velikost_hraciho_pole()
had = [(0, 0), (0, 1), (0, 2)]
ovoce = []
pridej_ovoce(velikost, had, ovoce)
vykresli_mapu(velikost, had, ovoce)
while posun(velikost, had, ovoce):
vykresli_mapu(velikost, had, ovoce)
if not ovoce:
pridej_ovoce(velikost, had, ovoce)
Jde o techniku řešení problému, při které se svůj problém snažíte vysvětlit někomu (nebo v případě gumové kachny něčemu), kdo programování nemusí vůbec rozumět. Když řešenou problematiku a vaše současné řešení popisujete nahlas, uvědomíte si, co váš program aktuálně dělá a co by dělat měl, což zpravidla vede k vyřešení problému.